perm filename IMP.MID[NET,MRC]2 blob sn#381700 filedate 1978-09-16 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00008 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	TITLE IMP
C00003 00003	IMP PROMPT ERROR CRLRET
C00005 00004	NCPOP GTHOUR HRWIN
C00008 00005	RSTOP ALPHST HSTCHR
C00010 00006	NETSTA MSGLUP NXTMSG NAME MSG
C00014 00007	USLOGR RFCSER CHKLNK CONMSG NXTLNK
C00018 00008	DECOUT OCTOUT NUMOUT GETNUM GETNM1 GETOCT GETOC1
C00019 ENDMK
C⊗;
TITLE IMP
SUBTTL DATA

; Mark Crispin, SU-AI, 8/78

; General purpose IMP utility

INTIMS==000020,,
RFCS==  200000,,
RFCR==  100000,,
CLSS==  040000,,
CLSR==  020000,,
LGONCE==004000,,
REAPRV==040000,,
WRTPRV==020000,,
UPGPRV==004000,,
ACWPRV==000040,,
LUPPRV==000001,,

PRIVS==REAPRV\WRTPRV\UPGPRV\ACWPRV\LUPPRV

SWPBLK:	'DSK,,
SVRNAM:	'RFC,,
	14
	0
	'NETSYS
RUNPPN:	BLOCK 1

FFLNK:	BLOCK 1
LOGGER:	BLOCK 1

LNKTAB:	(7)
LNKDDB:	(7)
IMPLS:	(7)
IMPFS:	(7)
IMPSTB:	(7)

HSTSTR:	BLOCK 20.
PDL:	BLOCK 50.

IMPDIE:	0
FLNOPS:	0

RSTRST:	22
RSTHST:	0

WHYDWN:	23
REASON:	0
;IMP PROMPT ERROR CRLRET

SUBTTL Main program

IMP:	CAI
	RESET
	MOVE 17,[PDL(-50.)]
	MOVSI 377777
	SETPR2
	 JRST 4,.-1
	MOVSI (UPGPRV)
	SETPRV
	OPEN [0 ? 'IMP,, ? 0]
	 JRST 4,.-1
	MOVEI [.RSQZ 0,IMPDIE ? 0]
	.SYML
	 JRST 4,.-1
	ADDI 400000
	MOVEM IMPDIE
	MOVEI [.RSQZ 0,FLNOPS ? 0]	; first entry in our tables
	.SYML
	 JRST 4,.-1
	ADDI 400000
	MOVEM FLNOPS
PROMPT:	INSKIP
	 CAI
	OUTCHR ["!]
	INCHRW
	CAIN ↑M
	 INCHRW
	ANDI 137
	CAIN ↑J
	 JRST PROMPT
	CAIN "H
	 JRST [	OUTSTR [ASCIZ\elp:
Cycle, Exit, Help, Logger, NCP on/off, Reset, Statistics
\]
		JRST PROMPT]
	CAIN "E
	 JRST [	OUTSTR [ASCIZ/xit/]
		EXIT 1,
		JRST IMP]
	CAIN "L
	 JRST USLOGR
	CAIN "N
	 JRST NCPOP
	CAIN "R
	 JRST RSTOP
	CAIN "C
	 JRST [	OUTSTR [ASCIZ/ycle the network/]
		EIOTM
		CONO 400,100000
		JRST 2,@[CRLRET]]
	CAIN "S
	 JRST NETSTA
ERROR:	CLRBFI
	OUTCHR ["?]
CRLRET:	OUTSTR [ASCIZ/
/]
	JRST PROMPT
;NCPOP GTHOUR HRWIN

SUBTTL NCP operations

NCPOP:	OUTSTR [ASCIZ/CP o/]
	INCHRW
	ANDI 137
	CAIN "N
	 JRST [	SKIPN @IMPDIE
		 JRST ERROR
		MTAPE [12]
		JRST CRLRET]
	CAIE "F
	 JRST ERROR
	OUTCHR ["f]
	SKIPE @IMPDIE
	 JRST ERROR
	OUTSTR [ASCIZ/, back up on /]
	INCHRW
	ANDI 137
	CAIN "M
	 JRST [	OUTSTR [ASCIZ/onday/]
		SETZ 2,
		JRST GTHOUR]
	CAIN "W
	 JRST [	OUTSTR [ASCIZ/ednesday/]
		MOVEI 2,2
		JRST GTHOUR]
	CAIN "F
	 JRST [	OUTSTR [ASCIZ/riday/]
		MOVEI 2,4
		JRST GTHOUR]
	CAIN "S
	 JRST [	INCHRW
		ANDI 137
		CAIN "A
		 JRST [	OUTSTR [ASCIZ/turday/]
			MOVEI 2,5
			JRST GTHOUR]
		CAIE "U
		 JRST ERROR
		OUTSTR [ASCIZ/nday/]
		MOVEI 2,6
		JRST GTHOUR]
	CAIE "T
	 JRST ERROR
	INCHRW
	ANDI 137
	CAIN "U
	 JRST [	OUTSTR [ASCIZ/esday/]
		MOVEI 2,1
		JRST GTHOUR]
	CAIE "H
	 JRST ERROR
	OUTSTR [ASCIZ/ursday/]
	MOVEI 2,3
GTHOUR:	OUTSTR [ASCIZ/ at /]
	JSR GETNUM
	CAIG 23.
	 CAIE 1,":
	  JRST ERROR
	JUMPL ERROR
	ADDI 8.				; PST to GMT
	MOVE 1,400261			; DAYLIT
	MOVE 1,400000(1)
	SKIPE 1
	 SOS				; daylight losing time
	CAIG 23.
	 JRST HRWIN
	SUBI 24.
	AOS 2
	CAIN 2,7
	 SETZ 2,
HRWIN:	LSH 2,5
	ADD 2,
	JSR GETNUM
	CAIG 59.
	 CAIE 1,↑J
	  JRST ERROR
	JUMPL ERROR
	IDIVI 5
	LSH 2,4
	ADD 2,
	HRRM 2,REASON
	OUTSTR [ASCIZ/Reason:
 5 → Scheduled PM
 6 → Scheduled hardware work
 7 → Scheduled software work
 8 → Emergency restart
 9 → Power outage
10 → Software breakpoint
11 → Hardware failure
12 → Not scheduled up

Why down?/]
	JSR GETNUM
	CAIL 5
	 CAILE 14
	  JRST ERROR
	CAIE 1,↑J
	 JRST ERROR
	HRLM REASON
	MTAPE WHYDWN
	MTAPE [13]
	JRST PROMPT
;RSTOP ALPHST HSTCHR

SUBTTL Network reset

RSTOP:	OUTSTR [ASCIZ/eset host /]
	JSR GETOCT
	JUMPE ALPHST
	CAIN 1,↑J
	 TDNE [400600,,000400]
	  JRST ERROR
	MOVEM RSTHST
	MTAPE RSTRST
	JRST PROMPT

ALPHST:	SETZM HSTSTR
	MOVE [HSTSTR,,HSTSTR+1]
	BLT HSTSTR+19.
	MOVEI (1)
	ANDI 177
	CAIL 140
	 ANDI 137
	MOVE 1,[440700,,HSTSTR]
HSTCHR:	IDPB 1
	INCHWL
	CAIN ↑M
	 INCHWL
	ANDI 177
	CAIL 140
	 ANDI 137
	CAIE ↑J
	 JRST HSTCHR
	IOPUSH
	 JRST 4,.-1
	PUSHJ 17,MAPHST
	IOPOP
	 JRST 4,.-1
	MOVEI HSTSTR
	PUSHJ 17,HSTNAM
	 CAI
	 JRST [PUSHJ 17,UNMHST ? JRST ERROR]
	MOVEM RSTHST
	PUSHJ 17,UNMHST
	MTAPE RSTRST
	JRST PROMPT

HSTTAB==1

.INSRT NETWRK[NET,MRC]
;NETSTA MSGLUP NXTMSG NAME MSG

SUBTTL NCP statistics reporter

NETSTA:	OUTSTR [ASCIZ/tatistics
/]
	MOVE 3,FLNOPS
	MOVSI 4,-NMSGS
MSGLUP:	MOVE (3)
	JUMPE NXTMSG
	OUTSTR @NAME(4)
	PUSHJ 17,DECOUT
	OUTSTR @MSG(4)
NXTMSG:	AOS 3
	AOBJN 4,MSGLUP
	JRST PROMPT

NAME:	[ASCIZ/FLNOPS	/]
	[ASCIZ/TRACES	/]
	[ASCIZ/ERWOMI	/]
	[ASCIZ/NIMPDN	/]
	[ASCIZ/IIREST	/]
	[ASCIZ/GNILL	/]
	[ASCIZ/ERWMI	/]
	[ASCIZ/INCMTR	/]
	[ASCIZ/ILLMT	/]
	[ASCIZ/BDRFNM	/]
	[ASCIZ/NODDBS	/]
	[ASCIZ/UNKLNK	/]
	[ASCIZ/NRFNL	/]
	[ASCIZ/NILLOP	/]
	[ASCIZ/BSILL	/]
	[ASCIZ/BCMM	/]
	[ASCIZ/RERRM	/]
	[ASCIZ/NILLLD	/]
	[ASCIZ/N2RFCS	/]
	[ASCIZ/NHOST0	/]
	[ASCIZ/SLNOPS	/]
	[ASCIZ/NHANGS	/]
	[ASCIZ/NSPSUS	/]
	[ASCIZ/NRSETS	/]
	[ASCIZ/NMESIN	/]
	[ASCIZ/NMESOU	/]
	[ASCIZ/NNOLNK	/]
	[ASCIZ/NSCLSS	/]
	[ASCIZ/OPTMO	/]
	[ASCIZ/SLUNLK	/]
	[ASCIZ/RWNOSS	/]
	[ASCIZ/NIWCNO	/]
	[ASCIZ/NSSC	/]
	[ASCIZ/NALWNC	/]
NMSGS==.-NAME

MSG:	[ASCIZ/	IMP-HOST no-ops
/]
	[ASCIZ/	trace messages
/]
	[ASCIZ/	leader errors
/]
	[ASCIZ/	IMP going down messages
/]
	[ASCIZ/	interface reset messages
/]
	[ASCIZ/	homosocketual RFC's
/]
	[ASCIZ/	data errors
/]
	[ASCIZ/	incomplete transmissions
/]
	[ASCIZ/	illegal type messages
/]
	[ASCIZ/	spurious RFNM's
/]
	[ASCIZ/	missing DDB's
/]
	[ASCIZ/	messages to non-ex link
/]
	[ASCIZ/	spurious RFNMs with no links
/]
	[ASCIZ/	new control messages
/]
	[ASCIZ/	illegal byte sizes
/]
	[ASCIZ/	short control messages
/]
	[ASCIZ/	protocol errors
/]
	[ASCIZ/	illegal leaders
/]
	[ASCIZ/	duplicate RFCs
/]
	[ASCIZ/	messages from host 0
/]
	[ASCIZ/	Host-Host no-ops
/]
	[ASCIZ/	input blocks due to no FS
/]
	[ASCIZ/	spare FS blocks used
/]
	[ASCIZ/	resets
/]
	[ASCIZ/	messages received
/]
	[ASCIZ/	messages sent
/]
	[ASCIZ/	all links in use
/]
	[ASCIZ/	CLSs on non-ex socket
/]
	[ASCIZ/	interface time outs
/]
	[ASCIZ/	Host-host unknown links
/]
	[ASCIZ/	messages with no socket
/]
	[ASCIZ/	message without connection
/]
	[ASCIZ/	messages on closed socket
/]
	[ASCIZ/	allocates on non-ex link
/]
IFN .-MSG-NMSGS,.ERR lossage in message tables
;USLOGR RFCSER CHKLNK CONMSG NXTLNK

SUBTTL Logger

USLOGR:	MOVSI (PRIVS)
	SETPRV
	TLC (PRIVS)
	TLNE (PRIVS)
	 JRST ERROR
	OUTSTR [ASCIZ/ogger
/]
	IRPS SYM,,LOGGER FFLNK
	 MOVEI [.RSQZ 0,SYM ? 0]
	 .SYML 
	  JRST 4,.-1
	 ADDI 400000
	 MOVEM SYM
	TERMIN
	IRPS SYM,,LNKTAB LNKDDB IMPLS IMPFS IMPSTB
	 MOVEI [.RSQZ 0,SYM ? 0]
	 .SYML 
	  JRST 4,.-1
	 ADDI 377777
	 HRRM SYM
	TERMIN
	MOVSI 377776			; map monitor in with write access
	SETPR2
	 JRST 4,.-1
	MOVE 1,400226			; JOB
	MOVE 1,400000(1)
	MOVEM 1,@LOGGER			; seize the logger resource
	MOVE 2,400211			; PRJPRG
	ADDI 2,400000(1)
	MOVE 2,(2)
	MOVEM 2,RUNPPN			; set running PPN of servers
	MOVEI [DISMIS]			; set up interrupt
	MOVEM JOBAPR
	MOVSI (INTIMS)			; magic logger interrupt
	INTENB
RFCSER:	MOVE 7,@FFLNK			; set up pointer to links
CHKLNK:	SKIPE @LNKDDB			; ignore links with a DDB
	 JRST NXTLNK
	MOVE @IMPSTB			; get status of this link
	TLNE (RFCR)			; somebody listening?
	 TLNE (RFCS\CLSR\CLSS\LGONCE)	; link already been munged?
	  JRST NXTLNK
	MOVSI (LGONCE)
	IORM @IMPSTB			; flag we've looked at the link
	MOVE @IMPLS			; get socket for this link
	CAIGE 400			; public socket?
	 TRNN 1				; and heterosocketual?
	  JRST NXTLNK
	PUSH 17,@IMPFS			; save socket info on stack
	PUSH 17,@IMPLS
	PUSH 17,@LNKTAB
	LSHC -6				; separate 3 digits by three bits
	LSH 3
	LSHC 3
	LSH 3
	LSHC 3
	ADDI '000			; form sixbit socket number
	HRRM SVRNAM
	MOVEI SWPBLK
	SWAP				; fire up the server
	JUMPE [	OUTSTR [ASCIZ/Ign RFC/]
		JRST CONMSG]		; couldn't fire up server!
	OUTSTR [ASCIZ/RFC j=/]		; server job
	PUSHJ 17,DECOUT
CONMSG:	OUTSTR [ASCIZ/, hst=/]		; host number
	LDB [103017,,]
	PUSHJ 17,OCTOUT
	OUTSTR [ASCIZ/, lnk=/]		; link number
	POP 17,
	ANDI 377
	PUSHJ 17,OCTOUT
	OUTSTR [ASCIZ/, lsk=/]		; local socket number
	POP 17,
	PUSHJ 17,OCTOUT
	OUTSTR [ASCIZ/, fsk=/]		; foreign socket number
	POP 17,
	PUSHJ 17,OCTOUT
	OUTSTR [ASCIZ/.
/]
NXTLNK:	SOJG 7,CHKLNK			; try next link
	IWAIT				; wait for next interrupt
	JRST RFCSER
;DECOUT OCTOUT NUMOUT GETNUM GETNM1 GETOCT GETOC1

SUBTTL Subroutines

; Decimal/octal print routine

DECOUT:	SKIPA 2,[10.]			; decimal print
OCTOUT:	 MOVEI 2,8.			; octal print
NUMOUT:	IDIVI (2)
	PUSH 17,1
	SKIPE
	 PUSHJ 17,NUMOUT
	POP 17,
	ADDI "0
	OUTCHR
	POPJ 17,

GETNUM:	0
	SETZ
GETNM1:	INCHWL 1
	CAIN 1,↑M
	 INCHWL 1
	ANDI 1,177
	CAIL 1,"0
	 CAILE 1,"9
	  JRST @GETNUM
	IMULI 10.
	ADDI -"0(1)
	JRST GETNM1

GETOCT:	0
	SETZ
GETOC1:	INCHWL 1
	CAIN 1,↑M
	 INCHWL 1
	ANDI 1,177
	CAIL 1,"0
	 CAILE 1,"7
	  JRST @GETOCT
	LSH 3
	ADDI -"0(1)
	JRST GETOC1

END IMP